package com.test.controller;

import com.test.entity.File;
import com.test.entity.User;
import com.test.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

@Controller
@RequestMapping("/file")
public class FileController {
    @Autowired
    private FileService fileService;

    /**
     * 根据用户id,查询对应用户所有的上传的文件
     *
     * @param session
     * @param model
     * @return
     */
    @GetMapping("/showAll")
    public String findAll(HttpSession session, Model model) {
        //用户登录之后就会用用户信息储存在Session中,可以从session中取出用户的id进行文件查询
        User user = (User) session.getAttribute("user");
        List<File> files = fileService.findFiles(user.getId());
        if (files != null) {
            //将查到的文件放在model中
            model.addAttribute("files", files);
        }
        return "showAll";
    }

    /**
     * 上传文件  并保存文件信息到数据库
     *
     * @param file
     */
    @PostMapping("/upload")
    public String uploadFile(MultipartFile file, HttpSession session) throws IOException {
        fileService.saveFile(file, session);
        return "redirect:/file/showAll";
    }

    /**
     * 下载对应用户下的指定文件
     * 在线打开图片也是用这个借口,下载的时候 响应头中设置 类型为 inline则为在线打开  attachment为 附件下载
     * @param id 文件id
     */
    @GetMapping("/download")
    public void downloadFile(HttpServletResponse response, String openStyle, Integer id) throws IOException {
        fileService.findByFileId(id, openStyle, response);
        /*//因为下载 会更新下载次数,操作之后,重新加载列表
        return "redirect:/file/showAll";*/
    }

    /**
     * 删除文件
     * @param id  文件id
     */
    @GetMapping("/delete")
    public String deleteFile(Integer id) throws FileNotFoundException {
        fileService.deleteFile(id);
        //删除完之后重新查询列表
        return "redirect:/file/showAll";
    }

    /**
     * ajax请求传所有的文件信息,设置3秒执行一次,去更新下载次数
     * @param session session 为了从session中获取到用户
     * @return
     */
    @GetMapping("/showAllJson")
    @ResponseBody
    public List<File> showAllJson(HttpSession session) {
        //用户登录之后就会用用户信息储存在Session中,可以从session中取出用户的id进行文件查询
        User user = (User) session.getAttribute("user");
        //根据用户id查询 文件列表
        List<File> files = fileService.findFiles(user.getId());
        if (files != null) {
            //返回查询的文件列表
            return files;
        }
        return null;
    }
}
